Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove catch-all exception logger for asyncio tasks #605

Merged
merged 3 commits into from
Jul 5, 2024

Conversation

adnaans
Copy link
Contributor

@adnaans adnaans commented Jul 4, 2024

  • Removes the logger.exception statement run whenever an exception occurs in any asyncio task
  • Renames asyncio_create_task_with_done_error_log() to asyncio_create_task() based on above
  • Removes logging for errors on ChatGPT API calls, since it messes with the logger and fully raises the exception instead

Tested locally, raises the same errors in the console. Also confirmed ChatGPT errors are correct

Copy link

linear bot commented Jul 4, 2024

@adnaans adnaans requested a review from ajar98 July 4, 2024 01:33


def asyncio_create_task_with_done_error_log(
def asyncio_create_task(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is fine - i understand why we need tasks_registry, but I wonder if we audit the use-cases and eventually remove this method

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The primary reason I removed this is because each exception log causes a duplicate error in sentry. And we can just catch them by the raised error. Is there a scenario where we actually need this method/functionality?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i believe we keep tasks in tasks_registry so that these tasks don't get garbage collected when they aren't assigned to some state in a worker, e.g.

i was thinking we would eventually remove it and replace it with asyncio.create_task

Copy link
Contributor Author

@adnaans adnaans Jul 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh sure, you're talking about the method in general, not the change I made. Yeah eventually should be good to change to asyncio.create_task



def asyncio_create_task_with_done_error_log(
def asyncio_create_task(
*args,
reraise_cancelled: bool = False,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this would be a regression to remove this, right? remind me again what happens to tasks normally when they get cancelled

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not removing it though? It's just a method rename to not have "with done error log"

Copy link
Contributor Author

@adnaans adnaans Jul 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you referring to the reraise_cancelled part? That part didn't make sense to me because we only check for an asyncio.CancelledError when trying to log (which seems like would never happen). Has that occurred before?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, I'm referring to the reraise_cancelled part

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reading back the code, this is safe - all reraise_cancelled = True does is make more visible a cancel error when it actually gets cancelled

@ajar98 ajar98 merged commit c580d13 into main Jul 5, 2024
4 checks passed
ajar98 added a commit that referenced this pull request Jul 5, 2024
* [DOW-118] set up code linting and tests (#589)

* adds github workflow

* run black

* run isort

* adds precommit

* adds vscode settings

* adds pre-commit guidelines (#590)

* creates docker image, updates telephony app deps (#601)

* [DOW-105] refactor interruptions into the output device (#586)

* [DOW-105] refactor interruptions into the output device (#562)

* initial refactor works

* remove notion of UtteranceAudioChunk and put all of the state in the callback

* move per_chunk_allowance_seconds into output device

* onboard onto vonage

* rename to abstract output device and onboard other output devices

* initial work to onboard twilio output device

* twilio conversation works

* some cleanup with better comments

* unset poetry.lock

* move abstract play method into ratelimitoutputdevice + dispatch to thread in fileoutputdevice

* rename back to AsyncWorker

* comments

* work through a bit of mypy

* asyncio.gather is g2g:

* create interrupt lock

* remove todo

* remove last todo

* remove log for interrupts

* fmt

* fix mypy

* fix mypy

* isort

* creates first test and adds scaffolding

* adds two other send_speech_to_output tests

* make send_speech_to_output more efficient

* adds tests for rate limit interruptions output device

* makes some variables private and also makes the chunk id coming back from the mark match the incoming audio chunk

* adds twilio output device tests

* make typing better for output devices

* fix mypy

* resolve PR comments

* resolve PR comments

* [DOW-101] LiveKit integration (#591)

* checkpoint

* livekit v0

* in progress changes

* integrate with worker

* fix import

* update deps and remove unneeded files

* integrate it properly into app

* fix interrupts

* make transcript publish work

* a confounding fix

* isort

* constants, some cleanup

---------

Co-authored-by: Kian <[email protected]>

* upgrade to latest cartesia 1.0.3 (#587)

* upgrade to latest cartesia 1.0.3

* fixed linting conflict

* finish streaming

* make cartesia optional

---------

Co-authored-by: Ajay Raj <[email protected]>

* poetry version prerelease (#602)

* feat: Add ability to configure OpenAI base URL in ChatGPTAgentConfig (#577)

* feat: Add ability to configure OpenAI base URL in ChatGPTAgentConfig

- Added `base_url` parameter to `ChatGPTAgentConfig` to allow customization of the OpenAI API base URL.
- Updated `instantiate_openai_client` function to use the `base_url` parameter from the configuration.
- Modified `ChatGPTAgent` to utilize the updated `instantiate_openai_client` function.
- Added tests to verify the new `base_url` functionality in `tests/streaming/agent/test_base_agent.py`.

This enhancement allows users to specify a custom OpenAI API base URL, providing greater flexibility in agent configuration.

* adding capability to use the openai compatible endpoint with token estimation for llama

* lint fix

* changing openai base_url parameter for overall less code changes

* missed logging update

* Update vocode/streaming/agent/chat_gpt_agent.py

* Update tests/streaming/agent/test_base_agent.py

* fix test

---------

Co-authored-by: Ajay Raj <[email protected]>

* Support passthrough of AsyncHTTPTransport (#603)

Support passthrough of AsyncHTTPTransport object

* add script used to make PR

* adds test target for vocodehq-public

* Remove catch-all exception logger for asyncio tasks (#605)

* remove error log from exception for asyncio tasks

* remove log error on chatgpt query

---------

Co-authored-by: Kian <[email protected]>
Co-authored-by: rjheeta <[email protected]>
Co-authored-by: Clay Elmore <[email protected]>
Co-authored-by: vocode-petern <[email protected]>
Co-authored-by: Adnaan Sachidanandan <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants